package com.liser.southernstar.utils;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

/**
 * 下载工具
 */
public class DownloadUtils {
    /**
     * 下载文件
     * @param cachePath 缓存路径
     * @param remotePath 远程文件路径
     * @param bufferSize 缓存大小
     * @param timeOut 超时时间
     */
    public static File copyFile(String cachePath, HttpHandle.Urls remotePath, int bufferSize, int timeOut) throws IOException {
        CallData<Boolean> success = new CallData<>();
        success.setValue(false);
        File file = new File(cachePath);
        // 下载
        HttpHandle.getInstance().get(remotePath, (in->{
            // 重新创建文件
            if(file.exists()){
                file.delete();
            }else{
                new File(file.getParent()).mkdirs(); // 如果直接mkdirs，有些机型会把文件创建成为文件夹
            }
            file.createNewFile();
            // 复制文件到本地
            try(FileOutputStream out = new FileOutputStream(file)){
                StreamUtils.fastCopy(in, out, bufferSize);
            }
            success.setValue(true);
        }), timeOut);
        if(!success.getValue()){
            throw new IOException("文件下载失败");
        }
        return file;
    }
}
